// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
import com.nokia.symbian 1.1
import Qt.labs.components 1.1
import "denunciaCore.js" as DenunciaCore
import "denunciaFinal.js" as DenunciaFinal
import Basicos 1.0
import com.rogerio.metro 1.0
import com.nokia.extras 1.1

Item {
    id: root

    signal voltar()
    signal finalizado(int idEmpresaLinha);

    function dadosValidados()
    {
        if (txtVagao.text == "")
            return "Informe o vagão!";
        if (modelLinhas.itemSelecionado == "")
            return "Escolha a linha!";
        if (modelEstacoes.itemSelecionado == "")
            return "Escolha a estão neste momento!";
        return "";
    }

    XmlListModel {
       id: modelLinhas
       source: "dados.xml"
       query: "/root/linhas/linha"

       property string itemSelecionado: ""
       property int idEmpresaLinha: -1
       property variant terminais : null

       onItemSelecionadoChanged: {
           var extremidades = DenunciaCore.terminaisDaLinha(modelLinhas.itemSelecionado);
           modelLinhas.terminais = extremidades;
       }

       XmlRole {
           name: "numero"
           query: "@numero/number()"
       }

       XmlRole {
           name: "cor"
           query: "@cor/string()"
       }

       XmlRole {
           name: "empresa"
           query: "@empresa/string()"
       }
    }

    XmlListModel {
        id: modelEstacoes
        source: "dados.xml"
        query: "/root/linhas/linha[@cor=\""+modelLinhas.itemSelecionado+"\"]/estacoes/estacao"

        property string itemSelecionado: ""

        XmlRole {
            name: "nome"
            query: "@nome/string()"
        }

        onStatusChanged: {
            modelEstacoes.itemSelecionado = "";
        }
    }    

    InfoBanner {
        id: inf
        timeout: 1000

        function mostrar(mensagem)
        {
            inf.text = mensagem;
            inf.open();
        }
    }

    TextField {
        id: txtVagao
        placeholderText: "Vagão"
        font { bold: true; pixelSize: 35 }
        anchors.horizontalCenter: parent.horizontalCenter
        maximumLength: 4
        onTextChanged: {
            txtVagao.text = txtVagao.text.toUpperCase();
        }
        width: parent.width / 2
        height: 50
    }

    Column {
        width: parent.width
        anchors.top: txtVagao.bottom

        SelectionListItem {
            id: linha
            title: "Linha"
            subTitle: modelLinhas.itemSelecionado
            width: parent.width * 0.95

            onClicked: {
                selDialogLinhas.open();
            }

            SelectionDialog {
                id: selDialogLinhas
                titleText: "Linha"
                model: modelLinhas
                delegate: Item {
                    width: parent.width; height: lstItem1.height

                    ItemLista {
                        id: lstItem1
                        valor: cor                        
                        onSelecionado: {
                            modelLinhas.itemSelecionado = v;
                            modelLinhas.idEmpresaLinha = (empresa == "metro" ? SMSMetro.Metro : SMSMetro.CPTM);
                            selDialogLinhas.close();
                        }
                    }

                    Rectangle {
                        width: childrenRect.width; height: lstItem1.height;
                        color: "white"
                        anchors { right: parent.right; verticalCenter: parent.verticalCenter }

                        Image {
                            width: 70; height: parent.height
                            source: "qrc:///logo_" + empresa
                        }
                    }
                }
            }

        }

        SelectionListItem {
            id: estacao
            title: "Estação"
            width: parent.width * 0.95
            subTitle: modelEstacoes.itemSelecionado

            onClicked: {
                if (modelLinhas.itemSelecionado != "")
                    selDialogEstacoes.open();
                else
                    dlgSemLinha.open();
            }

            QueryDialog {
                id: dlgSemLinha
                titleText: "Selecione a linha"
                message: "Antes de selecionar a estação, selecione a linha <br />"+
                         "em que você se encontra!"
                acceptButtonText: "Ok"
            }

            SelectionDialog {
                id: selDialogEstacoes
                model: modelEstacoes
                titleText: "Estações"
                delegate: Item {
                    width: parent.width; height: lstItem2.height

                    ItemLista {
                        id: lstItem2
                        valor: nome
                        onSelecionado: {
                            modelEstacoes.itemSelecionado = v;
                            selDialogEstacoes.close();
                        }
                    }
                }
            }
        }

        GroupBox {
            id: groupRadiosSentidos
            titulo: "Sentido"
            width: parent.width - 10;
            visible: modelLinhas.itemSelecionado != ""
            corBorda: "white"
            corTexto: "white"

            property string estacao1 : ""
            property string estacao2 : ""

            property string estacaoDestino : estacao1
            property string proximaEstacao : DenunciaCore.proximaEstacao(modelLinhas.itemSelecionado, modelEstacoes.itemSelecionado, estacaoDestino);

            Connections {
                target: modelLinhas

                onTerminaisChanged: {
                    groupRadiosSentidos.estacao1 = modelLinhas.terminais[0]
                    groupRadiosSentidos.estacao2 = modelLinhas.terminais[1]
                    radio1.checked = false;
                    radio1.checked = true;
                }
            }

            Column {
                id: colSentido
                width: parent.width

                CheckableGroup { id: grupo }

                RadioButton {
                    id: radio1
                    text: groupRadiosSentidos.estacao1
                    platformExclusiveGroup: grupo

                    onCheckedChanged: {
                        if (checked)
                            groupRadiosSentidos.estacaoDestino = groupRadiosSentidos.estacao1;
                    }
                }

                RadioButton {
                    id: radio2
                    text: groupRadiosSentidos.estacao2
                    platformExclusiveGroup: grupo

                    onCheckedChanged: {
                        if (checked)
                            groupRadiosSentidos.estacaoDestino = groupRadiosSentidos.estacao2;
                    }
                }
            }
        }
    }

    Item {
        height: 60
        anchors { left: parent.left; right: parent.right; bottom: parent.bottom; }

        Row {
            anchors.centerIn: parent

            BotaoMaroto {
                width: 150
                corFundo: "white"
                corTexto: "black"
                corFundoClicado: "red"
                texto: "Voltar"
                onClique: {
                    root.voltar();
                }
            }

            BotaoMaroto {
                width: 150
                corFundo: "white"
                corTexto: "black"
                corFundoClicado: "red"
                texto: "Finalizar"
                onClique: {
                    var msgValidacao = root.dadosValidados();
                    if (msgValidacao == "")
                    {
                        DenunciaFinal.adicionarPrincipalItemSelecionado("Vagão", txtVagao.text);
                        DenunciaFinal.adicionarPrincipalItemSelecionado("Linha", modelLinhas.itemSelecionado);
                        DenunciaFinal.adicionarPrincipalItemSelecionado("Estação", modelEstacoes.itemSelecionado);
                        DenunciaFinal.adicionarPrincipalItemSelecionado("Sentido", groupRadiosSentidos.estacaoDestino);
                        DenunciaFinal.adicionarPrincipalItemSelecionado("Próxima Estação", groupRadiosSentidos.proximaEstacao);
                        root.finalizado(modelLinhas.idEmpresaLinha);
                    }
                    else
                        inf.mostrar(msgValidacao);
                }
            }
        }
    }

}
